Qualcomm Technologies, Inc. Inter-Processor Communication Controller binding

The Inter-Processor Communication Controller (IPCC) is a centralized hardware
to route the interrupts across various subsystems. It involves a three-level
addressing scheme: protocol, client and signal. For example, consider an entity
on the Application Processor Subsystem (APSS) that wants to listen to Modem's
interrupts via Shared Memory Point to Point (SMP2P) interface. In such a case,
the client would be Modem (client-id: 2) and the signal would be SMP2P
(signal-id: 2). The SMP2P itself falls under the Multiprocessor (MPROC) protocol
(protocol-id: 0). Please visit include/dt-bindings/soc/qcom/qcom,ipcc.h for the
list of IDs.

Each protocol has a dedicated interrupt line, and as a result, each protocol is
exposed as a separate interrupt controller. One of the duties of this interrupt
controller driver would be to forward the interrupt to the correct entity
on the APPS. The children inheriting the interrupt-controller would be
mentioning the client-id and signal-id that it's interested in.

On the other hand, sending an interrupt to a subsystem is done through the
mailbox interface, which again requires client-id and signal-id.

- compatible:
  Usage: required
  Value type: <string>
  Definition: Must be "qcom,ipcc"

- reg:
  Usage: required
  Value type: <prop-encoded-array>
  Definition: One entry specifying the base address and size corresponding to
	      the protocol frame

- interrupts:
  Usage: required
  Value type: <prop-encoded-array>
  Definition: One entry specifying the protocol's interrupt

- interrupt-controller:
  Usage: required
  Value type: <empty>
  Definition: Specifies that the device acts as an interrupt controller

- #interrupt-cells:
  Usage: required
  Value type: <u32>
  Definition: must be 3 - denoting client-id, signal-id and interrupt type

- mbox-cells:
  Usage: required
  Value type: <u32>
  Definition: must be 2 - denoting client-id and signal-id

Example
-------
	#include <dt-bindings/soc/qcom,ipcc.h>

	ipcc_mproc: qcom,ipcc@408000 {
		compatible = "qcom,ipcc";
		reg = <0x408000 0x1000>;
		interrupts = <GIC_SPI 229 IRQ_TYPE_LEVEL_HIGH>,
		interrupt-controller;
		#interrupt-cells = <3>;
		#mbox-cells = <2>;
	};

Client-example
--------------
	qcom,smp2p-modem@1799000c {
		compatible = "qcom,smp2p";
		interrupts-extended = <&ipcc_mproc IPCC_CLIENT_MPSS
				IPCC_MPROC_SIGNAL_SMP2P IRQ_TYPE_EDGE_RISING>;
		mboxes = <&ipcc_mproc IPCC_CLIENT_MPSS IPCC_MPROC_SIGNAL_SMP2P>;

		/* Other SMP2P fields */
	};
